package com.tanhua.server.service;

import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
@Slf4j
public class MqMessageService {

    @Autowired
    private AmqpTemplate amqpTemplate;

    /**
     * 发送日志消息
     *
     * @param userId
     * @param type 操作类型,
     *            0101为注册登录，
     *            0102为登录，
     *            0201为发动态，
     *            0202为浏览动态，
     *            0203为动态点赞，
     *            0204为动态喜欢，
     *            0205为评论，
     *            0206为动态取消点赞，
     *            0207为动态取消喜欢，
     *            0301为发小视频，
     *            0302为小视频点赞，
     *            0303为小视频取消点赞，
     *            0304为小视频评论
     * @param key      用户相关user , 动态相关movement , 小视频相关 video
     * @param busId   业务id  动态id或者视频id
     *
     * @param userId  登录用户id
     * @param type 对应operType表, 操作类型
     * @param key routingKey
     * @param busId 业务对象的id: 操作视频它就视频id, 操作的是动态它就是动态id
     */
    public void sendLogMessage(Long userId,String type,String key,String busId) {
        try {
            Map<String,Object> map = new HashMap<String,Object>();
            map.put("userId",userId.toString());
            map.put("type",type);
            map.put("logTime", DateUtil.today());
            map.put("busId",busId);// 业务对象id
            String message = JSON.toJSONString(map);
            //{"busId":"61b8148b57b2867b8d706371","type":"0203",
            //"userId":"10012","logTime":"2021-12-22"}
            amqpTemplate.convertAndSend("tanhua.log.exchange", "log."+key,message);
        } catch (AmqpException e) {
            log.error("RabbitMQ发送消息失败: {},{},{},{}",userId, type, key, busId );
        }
    }

    //发送动态审核消息
    public void sendAudiMessage(String movementId) {
        try {
            amqpTemplate.convertAndSend("tanhua.audit.exchange",  "audit.movement",movementId);
        } catch (AmqpException e) {
            log.error("RabbitMQ发送消息失败: 动态审核:{}", movementId);
        }
    }
}

